package com.mdd.front.service;

import com.mdd.common.core.PageResult;
import com.mdd.front.validate.commons.PageValidate;
import com.mdd.front.validate.order.AddressCreateValidate;
import com.mdd.front.validate.order.AddressUpdateValidate;
import com.mdd.front.vo.order.AddressIndexVo;
import com.mdd.front.vo.order.AddressVo;

/**
 * 地址服务层
 * @author shenjian
 * @createTime 2023年02月08日 23:13:00
 */
public interface IAddressService {

    /**
     * 地址列表
     *
     * @author shenjian
     * @param pageValidate (分页参数)
     * @return PageResult<AddressVo>
     */
    PageResult<AddressVo> list(PageValidate pageValidate);

    /**
     * 新增地址
     *
     * @author shenjian
     * @param createValidate 参数
     */
    void add(AddressCreateValidate createValidate);

    /**
     * 更新地址
     *
     * @author shenjian
     * @param updateValidate 参数
     */
    void edit(AddressUpdateValidate updateValidate);

    /**
     * 地址详情
     *
     * @author shenjian
     * @param id 主键参数
     * @return AddressVo
     */
    AddressVo detail(Integer id);

    /**
     * 删除地址
     *
     * @author shenjian
     * @param id 主键参数
     */
    void del(Integer id);

    /**
     * 设置默认地址
     *
     * @author shenjian
     * @param id 主键参数
     */
    void setDefault(Integer id);

    /**
     * 首页展示地址
     *
     * @author shenjian
     * @param addressId 地址ID
     * @param longitude 经度
     * @param latitude  维度
     */
    AddressIndexVo getIndexAddressInfo(Integer addressId, Double longitude, Double latitude);
}
